Controllo del flusso: cicli e condizioni

Quasi la totalità dei programmi ha la necessità di svolgere alcune istruzioni o compiere determinate operazioni (oppure evitare di compiere alcune operazioni) a seconda dei dati di partenza. Per esempio un programma che esegue una divisione tra due numeri a / b dovrà evitare di compiere l'effettiva operazione aritmetica se il dato b = 0.

Per questo in tutti i linguaggi di programmazione esistono dei particolari costrutti che generalmente permettono di:
- Scegliere se eseguire o meno una certa porzione di codice, oppure
- Eseguire più volte una certa parte di codice.

Dal punto di vista implementativo queste modifiche al normale flusso del programma si realizzano con determinate parole chiave:
IF  ELSE
if ( condizione )
   {
//operazioni da eseguire se la condizione è verificata
   }
else
   {
//operazioni da eseguire se la condizione non è verificata
   }


IF
if ( condizione )
   {
//operazioni da eseguire se la condizione è verificata
   }
//altre operazioni del programma


DO WHILE
  do {
//istruzioni del ciclo        
        } while ( condizione ) ;


WHILE
  while ( condizione )
     {
//istruzioni del ciclo
      }


FOR
  for (assegnamento; condizione; incremento o decremento)
    {        
// istruzioni del ciclo      
      }


FOREACH
  foreach (array_expression as $valore)
    {        
// istruzioni del ciclo      
     }



CONDIZIONE
Per condizione s'intende ogni operazione aritmetico-logica che dia come risultato il valore true oppure il valore false. Per esempio:
$primoDato>0
$secondoDato<=3
($terzoDato>5 && $terzoDato<100) || ($secondoDato!=0 && $primoDato==2)


Nonostante questo nel PHP, come in altri linguaggi ad alto livello esistono dei valori che pur non essendo di tipo booleano vengono considerati tali (*) ad esempio:
- valore nullo, NULL = false , 0 = false.
- valore non nullo, ! NULL = true , 1 = true.
per esempio la condizione seguente ha come valore true se la variabile a è diversa da 1 e la funzione Log(a) non produce errori (*):
- a!=1 && Log(a)

(*) Solitamente, quando viene implementata una funzione (la maggior parte delle funzioni già presenti nel linguaggio o nelle librerie pubbliche e non solo per quanto riguarda il PHP), si cerca di prevedere che nel caso di dati di input errati o impossibilità di eseguire le operazioni per svariati motivi, la funzione abbia come valore di ritorno false in modo che nel flusso principale si possa oltre che lanciare la funzione controllare anche che questa sia effettivamente stata eseguita correttamente. Per esempio se avessimo una funzione Dividi(a,b) che esegue l'operazione a/b potremmo controllare il flusso principale nel seguente modo:
if ( ! $c = Dividi ( $a , $b ) )
{
print("Errore nei dati. Impossibile eseguire la divisione.");
}
else
{
print("Il risultato della divisione è $c.");
}


Ora, chiarito il termine condizione si può vedere un costrutto di esempio che permette di eseguire una certa parte di codice (quella interna al blocco dell'if) se la condizione di controllo (quella interna alle parentesi) è verificata. Se la condizione non è verificata viene saltato per intero il blocco interno dell'if e il programma prosegue partendo dall'else.
E' possibile far seguire all'else un ulteriore if senza che sia presente il blocco d'istruzioni dell'else, quindi:
IF ElSE:
if ( condizione1 )
   {
   // operazioni da eseguire se la condizione è verificata
   }
else
if ( condizione2 )
  {
  // operazioni da eseguire se la condizione2 è verificata
  }
else
if ( condizione3 )
  {
  // operazioni da eseguire se la condizione3 è verificata
  }  
  // altre operazioni del flusso principale


In questo caso se la condizione1 è verificata si eseguono le operazioni del primo if e si saltano tutti gli altri if seguiti agli else accodati, quindi condizione2 e condizione3 non vengono neanche valutate. Questo tipo di costrutto opera in modo praticamente identico al costrutto switch-case.

Privacy Policy